<?php 

//文件上传类  可多文件上传
class UpTool{
	protected $allowExt = 'jpg,jpeg,gif,bmp,png';
	protected $maxSize = 1; //单位M
	protected $errnum = 0; //错误代码
	protected $error = array(
		0=>'无错',
		1=>'上传文件大小超出系统设置',
		2=>'上传文件大小超出网页表单限制',
		3=>'文件只有部分被上传',
		4=>'没有文件被上传',
		6=>'找不到临时文件夹',
		7=>'文件写入失败',
		8=>'文件类型不允许',
		9=>'文件大小超出类的限制',
		10=>'目录创建失败',
		11=>'获取文件名失败',
		12=>'文件移动失败'
	);
	/**
	 * @return array|bool
	 */
	public function up(){
		if(empty($_FILES)){
			return false;
		}
		$data = array();
		foreach($_FILES as $k=> $v){
		//判断上传是否成功;
		if($v['error']){
			$this->errnum = $v['error'];
			return false;
		}
		//获取后缀
		$ext = $this->getExt($v['name']);
		//判断后缀
		if(!$this->isAllowExt($ext)){
			$this->errnum = 8;
			return false;
		}
		//判断大小
		if(!$this->isAllowSize($v['size'])){
			$this->errnum = 9;
			return false;
		}
		//创建目录
		$dir = $this->mk_dir();
		if(ROOT.$dir === false){
			$this->errnum = 10;
			return false;
		}
		//获取文件名
		$name = $this->getName();
		if($name === false){
			$this->errnum = 11;
			return false;
		}
			//移动文件
		if(!move_uploaded_file($v['tmp_name'],ROOT.$dir.'/'.$name.'.'.$ext)){
			$this->errnum = 12;
			return false; 
		}
		$data[$k] = $dir.'/'.$name.'.'.$ext;
		}
		return $data;
	}
	//判断文件类型
	protected function isAllowExt($ext){
		//$ext = $this->getExt($file);
		return in_array(strtolower($ext),explode(',',$this->allowExt));
	}
	//判断文件大小
	protected function isAllowSize($size){
		return $size <= $this->maxSize*1024*1024;
	}
	//获取文件目录
	protected function mk_dir(){
		$path = 'data/image/'.date('Ymd');
		$dir = ROOT.$path;
		if(is_dir($dir) || mkdir($dir,0777,true)){
			return $path;
		}
	}
	//获取随机文件名
	protected function getName(){
		$str = str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz23456789');
		$name = substr($str, 0,6).mt_rand(100000,999999);
		return $name;
	}
	//获取文件后缀
	protected function getExt($file){
		$tmp = explode('.',$file);
		return end($tmp);
	}
	//获取错误信息
	public function getError(){
		return $this->error[$this->errnum];
	}
	//修改上传类型
	public function setExt($ext){
		$this->allowExt = $ext;
	}
	//修改上传大小限制
	public function setSize($size){
		$this->maxSize = $size ;
	}
}